<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<link href="../style/css/manual-zip.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-zip-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<title>文件描述符限制 － Apache 2.2 中文手册 [金步国]</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head>
<body id="manual-page" class="no-sidebar"><div id="page-header">
<p class="menu"><a href="../mod/index.html">模块索引</a> | <a href="../mod/directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p><p class="apache">Apache HTTP Server 版本2.2</p><img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="index.html"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path"><a href="https://www.apache.org/">Apache</a> &gt; <a href="https://httpd.apache.org/">HTTP Server</a> &gt; <a href="https://httpd.apache.org/docs/">文档</a> &gt; <a href="../index.html">版本2.2</a> &gt; <a href="index.html">虚拟主机</a></div>

<div id="translation-info">　　 <a href="../translator_announcement.html#thanks">致谢</a> | 本篇译者：<a href="../../../index.html">金步国</a>(<a href="../../../index.html">作品集</a>) | 本页最后更新：2006年10月20日</div>
<div id="page-content"><div id="preamble"><h1>文件描述符限制</h1>



    <p>当使用了大量虚拟主机，而且每个主机又使用了不同的日志文件时，Apache可能会遭遇文件描述符(有时也称为<cite>文件句柄</cite>)耗尽的困境。Apache使用的文件描述符总数如下：每个不同的错误日志文件一个、每个其他日志文件指令一个、再加10－20个作为内部使用。Unix操作系统限制了每个进程可以使用的文件描述符数量。典型上限是64个，但可以进行扩充，直至到达一个很大的硬件限制为止(hard-limit)。</p>

    <p>尽管Apache会试着增大限制，但如果发生以下情况，则这个机制无法起作用：</p>

    <ol>
      <li>您的操作系统没有提供<code>setrlimit()</code>系统调用。</li>

      <li><code>setrlimit(RLIMIT_NOFILE)</code>调用无法在您的系统上正常工作(比如 Solaris 2.3)</li>

      <li>文件描述符的需求量已经超出了硬件的限制。</li>

      <li>您的操作系统对文件描述符作出了其他限制。比如说限制了stdio流只能使用256以下的文件描述符。(Solaris 2)</li>
    </ol>

	<p>如果遇到了这样的问题，您可以这样解决：</p>

    <ul>
      <li>减少日志文件的数量。不在<code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>配置段中指定日志文件，而是只在主日志文件中进行记录。(参见下述<a href="fd-limits.html#splitlogs">分解日志文件</a>获得详情)</li>

      <li>如果您的系统因上述第1条或第2条原因不能正常工作，可以在启动Apache之前，用类似下述的脚本增大文件描述符的限制：
        <div class="example"><p><code>
          <code>#!/bin/sh<br />
           ulimit -S -n 100<br />
           exec httpd</code>
        </code></p></div>
      </li>
    </ul>
</div>
<div class="top"><a href="fd-limits.html#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="splitlogs" id="splitlogs">分解日志文件</a></h2>

<p>如果您想把多个虚拟主机的日志记录到同一个日志文件中，你可能会想事后把它们分开，以对不同的虚拟主机数据进行统计分析。您可用下述方法达到这个目的。</p>

<p>首先，您需要将虚拟主机的信息放入日志中。您可以用<code class="directive"><a href="../mod/mod_log_config.html#&#10;logformat">LogFormat</a></code>指令和"<code>%v</code>"变量达到这个目的。在您的日志格式串的开头加入它们：</p>

<div class="example"><p><code>
LogFormat "%v %h %l %u %t \"%r\" %&gt;s %b" vhost<br />
CustomLog logs/multiple_vhost_log vhost
</code></p></div>

<p>这将用日志的普通格式来创建一个日志文件。但会在每条记录前加上正式的虚拟主机名(就是在<code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>指令中定义的那个)。(参见<a href="../mod/mod_log_config.html#formats">自定义日志格式</a>以获取更多内容)</p>

<p>当您想将日志文件分开(每个虚拟主机一个日志文件)的时候，您可以使用<code><a href="../programs/other.html">split-logfile</a></code>程序来完成这个工作。您将在Apache发行版的<code>support</code>目录中找到这个程序。</p>

<p>用如下命令来运行这个程序：</p>

<div class="example"><p><code>
split-logfile &lt; /logs/multiple_vhost_log
</code></p></div>

<p>当这个程序在给予一个虚拟主机日志文件作为参数的情况下，会为日志文件中的每个虚拟主机建立一个文件。每个文件都以"<code>主机名.log</code>"这样的形式命名。</p>

</div></div>
<div id="footer">
<p class="apache">本文允许自由的转载、引用、再分发，但必须保留译者署名并注明出处；详见：<a href="../translator_announcement.html#announcement">版权声明</a>。</p>
<p class="menu"><a href="../mod/index.html">模块索引</a> | <a href="../mod/directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p></div>
</body></html>
